AlteryxのPythonツールを使いBacklog APIから課題一覧を取得してみた
チームメンバーからAlteryxでBacklogの課題をAPIを使い全件取得したいと相談を受け、Downloadツールを使ったワークフローを作成したのですが、ふとPythonツールでも出来るのではと思ったので試してみました。
Downloadツールを使ったワークフロー
Backlog APIの課題一覧は1回のリクエストで最大100件までしかデータを取得できないため、課題数を取得した後に行作成ツールでoffset値をインクリメントしたURLを作成してリクエストを行います。
データを取得した後にJSONパースや列分割、クロスタブ等で整形します。
実行結果
ネットワークやPCスペックに依存すると思いますが1.5秒で終わりました。速い。
参考
Backlog API 課題数の取得
Backlog API 課題一覧の取得
AlteryxからSalesforce PardotへのAPIアクセス
Pythonツールを使ったワークフロー
シンプルです。
コード
URLやAPIキー、プロジェクトIDの値はテキスト入力に入力した値を参照します。
Downloadツールを使用したワークフローと同様に、課題数を取得した後、offset値が課題数に達するまでリクエストをループします。
取得したデータはPandasのDataFrameとして出力することで後続のツールで参照可能です。
from ayx import Alteryx import requests import pandas as pd import json issues_count_URL = Alteryx.read("backlog_conf")['issuesCountURL'][0] issues_URL = Alteryx.read("backlog_conf")['issuesURL'][0] api_key = Alteryx.read("backlog_conf")['apiKey'][0] project_id = Alteryx.read("backlog_conf")['projectId[]'][0] params = { 'apiKey':api_key, 'projectId[]':project_id } count_res = requests.get(issues_count_URL,params=params) count_json = count_res.json() issues_count = count_json['count'] params = { 'apiKey':api_key, 'projectId[]':project_id, 'count':100, 'offset':0 } issues_res = requests.get(issues_URL,params=params) issues_json = issues_res.json() issues_df = pd.json_normalize(issues_json) i = 100 while i < issues_count: params = { 'apiKey':api_key, 'projectId[]':project_id, 'count':100, 'offset':i } res = requests.get(issues_URL,params=params) res_json = res.json() df = pd.json_normalize(res_json) issues_df = pd.concat([issues_df,df]) i+=100 Alteryx.write(issues_df, 1)
実行結果
10.5秒とDownloadツールを使用したワークフローと比べるとかなり遅いです。
深掘りはしませんが、
- Downloadツールは最大接続(デフォルトは2)を指定することで複数のURLに対して同時転送を行える事
- Pythonツールは結果をAlteryx.writeで出力する際に一時ファイルを作成する事
あたりが影響していそうです。
まとめ
外部APIからのデータ取得にPythonツールを使用するとワークフローはシンプルになります。
ただし処理時間が増える事があるので基本的はDownloadツールを使った方が良さそうです。